from backend.models.base import BaseModel
from backend.database import db
import bcrypt
import uuid
from datetime import datetime, timedelta

class User(BaseModel):
    __tablename__ = 'users'
    
    phone = db.Column(db.String(20), unique=True, nullable=False)
    password_hash = db.Column(db.String(255), nullable=False)
    username = db.Column(db.String(100), nullable=True)
    avatar = db.Column(db.String(255), nullable=True)
    is_active = db.Column(db.Boolean, default=True)
    last_login_at = db.Column(db.DateTime, nullable=True)
    # 添加权限字段，默认为普通用户权限
    # 权限级别: 0 - 普通用户, 1 - 管理员, 2 - 超级管理员
    permission_level = db.Column(db.Integer, default=0, nullable=False)
    
    # 微信相关字段
    wechat_openid = db.Column(db.String(100), unique=True, nullable=True)
    wechat_unionid = db.Column(db.String(100), unique=True, nullable=True)
    
    def set_password(self, password):
        # 生成密码哈希
        self.password_hash = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
    
    def check_password(self, password):
        # 验证密码
        return bcrypt.checkpw(password.encode('utf-8'), self.password_hash.encode('utf-8'))
    
    def generate_token(self):
        # 生成用户token（简化实现，实际项目中应使用JWT等更安全的方式）
        return str(uuid.uuid4())